﻿using System;
using Company.BLL;
using Company.BLL.KDT.GC;
using Janus.Windows.GridEX;
using Company.BLL.DuLieuChuan;

namespace Company.Interface.KDT.GC
{
    public partial class DinhMucGCEditForm : BaseForm
    {
        public Company.BLL.KDT.GC.DinhMuc DMDetail = new Company.BLL.KDT.GC.DinhMuc();
        public Company.BLL.KDT.GC.DinhMucCollection dmCollection = new Company.BLL.KDT.GC.DinhMucCollection();        
        public Company.BLL.KDT.GC.HopDong hopdong;
        public DinhMucDangKy dmdk=new DinhMucDangKy();     
        public bool isAdd = true;
        public DinhMucGCEditForm()
        {
            InitializeComponent();
            this._DonViTinh = DonViTinh.SelectAll();
            txtDonViTinhSP.DataSource = this._DonViTinh;
            txtDonViTinhSP.DisplayMember = "Ten";
            txtDonViTinhSP.ValueMember = "ID";
            txtDonViTinhSP.SelectedValue = GlobalSettings.DVT_MAC_DINH;
            txtDonViTinhNPL.DataSource = this._DonViTinh;
            txtDonViTinhNPL.DisplayMember = "Ten";
            txtDonViTinhNPL.ValueMember = "ID";
            txtDonViTinhNPL.SelectedValue = GlobalSettings.DVT_MAC_DINH;
        }

        private void txtMaSP_Leave(object sender, EventArgs e)
        {
            //if (txtMaSP.Text.Trim() == "")
            //    return;
            //SanPham sp = SanPham.Load(txtMaSP.Text.Trim(), hopdong.ID);
            //if (sp != null)
            //{
            //    txtMaSP.Text = sp.Ma.Trim();
            //    txtTenSP.Text = sp.Ten.Trim();
            //    txtMaHSSP.Text = sp.MaHS.Trim();
            //    txtDonViTinhSP.Text = this.DonViTinh_GetName(sp.DVT_ID).Trim();
            //}
            //else
            //{
            //    ShowMessage("Không có mã sản phẩm này", false);
            //    txtMaSP.Text = "";
            //}
        }

        private void txtMaSP_ButtonClick(object sender, EventArgs e)
        {
            SanPham sp = new SanPham();
            sp.HopDong_ID = hopdong.ID;
            DinhMucSelectSanPhamForm f = new DinhMucSelectSanPhamForm();           
            f.SPDetail.HopDong_ID = hopdong.ID;
            f.hongdong = hopdong;
            f.ShowDialog();
            if (f.SPDetail!=null && f.SPDetail.Ma != "")
            {
                txtMaSP.Text = f.SPDetail.Ma.Trim();
                txtTenSP.Text = f.SPDetail.Ten.Trim();
                txtMaHSSP.Text = f.SPDetail.MaHS.Trim();
                txtDonViTinhSP.SelectedValue = f.SPDetail.DVT_ID;
            }
        }

        private void txtMaNPL_ButtonClick(object sender, EventArgs e)
        {
            NguyenPhuLieu npl = new NguyenPhuLieu();
            DinhMucSelectNguyenPhuLieuForm f = new DinhMucSelectNguyenPhuLieuForm();
            f.hongdong = hopdong;
            f.isBrower = true;
            f.npl.HopDong_ID = hopdong.ID;
            f.ShowDialog();
            if (f.npl!=null && f.npl.Ma != "")
            {
                txtMaNPL.Text = f.npl.Ma.Trim();
                txtTenNPL.Text = f.npl.Ten.Trim();
                txtMaHSNPL.Text = f.npl.MaHS.Trim();
                txtDonViTinhNPL.SelectedValue = f.npl.DVT_ID;
            }
        }

        private void DinhMucGCEditForm_Load(object sender, EventArgs e)
        {
            dgList.DataSource = dmCollection;
            if (!isAdd)
            {
                btnAdd.Text = "Sửa";
                txtMaSP.Text = DMDetail.MaSanPham;
                SanPham sp = SanPham.Load(DMDetail.MaSanPham, hopdong.ID);
                if (sp != null && sp.Ma.Length > 0)
                {
                    txtTenSP.Text = sp.Ten.Trim();
                    txtMaHSSP.Text = sp.MaHS.Trim();
                    txtDonViTinhSP.SelectedValue = sp.DVT_ID; ;
                }
                else
                {
                    PhuKien pk = new PhuKien();
                    pk = pk.LoadSanPham(hopdong.ID, "S13", DMDetail.MaSanPham);
                    txtTenSP.Text = pk.TenHang;
                    txtMaHSSP.Text = pk.MaHS.Trim();
                    txtDonViTinhSP.SelectedValue = pk.DVT_ID;
                }
                //load thong tin npl
                NguyenPhuLieu npl = NguyenPhuLieu.Load(DMDetail.MaNguyenPhuLieu, hopdong.ID);
                txtMaNPL.Text = DMDetail.MaNguyenPhuLieu;
                if (npl != null && npl.Ma.Length > 0)
                {
                    txtTenNPL.Text = npl.Ten.Trim();
                    txtMaHSNPL.Text = npl.MaHS.Trim();
                    txtDonViTinhNPL.SelectedValue = npl.DVT_ID;
                }
                else
                {
                    PhuKien pk = new PhuKien();
                    pk = pk.LoadSanPham(hopdong.ID, "N01", DMDetail.MaNguyenPhuLieu);
                    if (pk == null)
                    {
                        pk = pk.LoadSanPham(hopdong.ID, "N11", DMDetail.MaNguyenPhuLieu);
                    }
                    txtTenNPL.Text = pk.TenHang;
                    txtMaHSNPL.Text = pk.MaHS.Trim();
                    txtDonViTinhNPL.SelectedValue = pk.DVT_ID;
                }
                txtDinhMuc.Text = DMDetail.DinhMucSuDung.ToString();
                txtTyLeHH.Text = DMDetail.TyLeHaoHut.ToString();
                txtNPLtucung.Text = DMDetail.NPL_TuCungUng.ToString();
                txtGhiChu.Text = DMDetail.GhiChu.Trim();                
            }
            if (dmdk.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                btnAdd.Enabled = false;                
            }
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            // 1. Kiểm tra dữ liệu.
            //cvError.Validate();
            //if (!cvError.IsValid) return;

            //if (!this.existNPL)
            //{
            //    error.SetIconPadding(txtMaNPL, -8);
            //    error.SetError(txtMaNPL, "Không tồn tại nguyên phụ liệu này.");
            //    return;
            //}
            //if (!this.existSP)
            //{
            //    error.SetIconPadding(txtMaSP, -8);
            //    error.SetError(txtMaSP, "Không tồn tại sản phẩm này.");
            //    return;
            //}

            //// 2. Cập nhật dữ liệu.
            //this.DMDetail.MaSanPham = txtMaSP.Text;
            //this.DMDetail.MaNguyenPhuLieu = txtMaNPL.Text;
            //this.DMDetail.DinhMucSuDung = Convert.ToDecimal(txtDinhMuc.Value);
            //this.DMDetail.TyLeHaoHut = Convert.ToDecimal(txtTyLeHH.Value);

            //// 3. Đóng.
            //this.Close();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.DMDetail = null;
            this.Close();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            txtMaSP.Text = "";
            txtTenSP.Text = "";
            txtMaHSSP.Text = "";
            txtDinhMuc.Text = "0";
            txtMaHSNPL.Text = "";
            txtMaNPL.Text = "";
            txtTenNPL.Text = "";
            txtTyLeHH.Text = "0.000";
            txtGhiChu.Text = "";
            txtNPLtucung.Text = "0";
            btnAdd.Text = "Thêm";
        }
        

        private void btnAdd_Click(object sender, EventArgs e)
        {
            cvError.Validate();
            if (!cvError.IsValid) return;
            if (Convert.ToDecimal(txtDinhMuc.Text) == 0)
            {
                error.SetError(txtDinhMuc, "Định mức phải lớn hơn 0");
                return;
            }
            //if (Convert.ToDecimal(txtTyLeHH.Text) == 0)
            //{
            //    error.SetError(txtDinhMuc, "Tỷ lệ hao hụt phải lớn hơn 0");
            //    return;
            //}
            checkExitsDinhMucAndSTTHang();
        }
        private void checkExitsDinhMucAndSTTHang()
        {
            if (dmdk.checkExitDinhMuc(txtMaNPL.Text.Trim(), txtMaSP.Text.Trim()))
            {
                ShowMessage("Đã có định mức này trong danh sách định mức khác của hợp đồng này.", false);
                return;
            }
            if (!isAdd)
                dmCollection.Remove(DMDetail);
            else//lay thong tin tao moi
            {
                DMDetail.MaSanPham = txtMaSP.Text.Trim();
                DMDetail.MaNguyenPhuLieu = txtMaNPL.Text.Trim();
                DMDetail.TyLeHaoHut =Convert.ToDecimal(txtTyLeHH.Text);
                DMDetail.DinhMucSuDung = Convert.ToDecimal(txtDinhMuc.Text);
                DMDetail.DVT_ID = txtDonViTinhNPL.SelectedValue.ToString(); ;
                DMDetail.GhiChu = txtGhiChu.Text.Trim();
                DMDetail.NPL_TuCungUng = Convert.ToDecimal(txtNPLtucung.Text);
                DMDetail.DVT_ID = txtDonViTinhNPL.Text;
                DMDetail.TenNPL = txtTenNPL.Text.Trim();
                DMDetail.TenSanPham = txtTenSP.Text.Trim();
            }

            foreach (Company.BLL.KDT.GC.DinhMuc dm in dmCollection)
            {
                if (dm.checkExits(txtMaSP.Text.Trim(), txtMaNPL.Text.Trim()))
                {
                    if (isAdd)//cap nhat
                    {
                        string st = ShowMessage("Đã có định mức này trong danh sách. Bạn có muốn cập nhật lại không?", true);
                        if (st == "Yes")
                        {
                            dm.MaSanPham = txtMaSP.Text.Trim();
                            dm.MaNguyenPhuLieu = txtMaNPL.Text.Trim();
                            dm.TyLeHaoHut = Convert.ToDecimal(txtTyLeHH.Text);
                            dm.DinhMucSuDung = Convert.ToDecimal(txtDinhMuc.Text);
                            DMDetail.GhiChu = txtGhiChu.Text.Trim();
                            DMDetail.NPL_TuCungUng = Convert.ToDecimal(txtNPLtucung.Text);
                            DMDetail.DVT_ID = txtDonViTinhNPL.SelectedValue.ToString(); ;
                            DMDetail.TenNPL = txtTenNPL.Text.Trim();
                            DMDetail.TenSanPham = txtTenSP.Text.Trim();
                            reset();
                            return;
                        }
                        else
                        {
                            DMDetail = new Company.BLL.KDT.GC.DinhMuc();                            
                            return;
                        }
                    }
                    else
                    {
                        ShowMessage("Đã có định mức này trong danh sách.", false);
                        dmCollection.Add(DMDetail);
                        return;
                    }
                }
            }
            if (isAdd)
            {
                dmCollection.Add(DMDetail);
                reset();
            }
            else//cap nhat
            {
                DMDetail.MaSanPham = txtMaSP.Text.Trim();
                DMDetail.MaNguyenPhuLieu = txtMaNPL.Text.Trim();
                DMDetail.TyLeHaoHut = Convert.ToDecimal(txtTyLeHH.Text);
                DMDetail.DinhMucSuDung = Convert.ToDecimal(txtDinhMuc.Text);
                DMDetail.GhiChu = txtGhiChu.Text.Trim();
                DMDetail.NPL_TuCungUng = Convert.ToDecimal(txtNPLtucung.Text);
                DMDetail.DVT_ID = txtDonViTinhNPL.SelectedValue.ToString(); ;
                DMDetail.TenNPL = txtTenNPL.Text.Trim();
                DMDetail.TenSanPham = txtTenSP.Text.Trim();
                dmCollection.Add(DMDetail);
                reset();                
            }
        }
        private void reset()
        {
            txtMaSP.Text = "";
            txtMaNPL.Text = "";
            txtTenNPL.Text = "";
            txtTyLeHH.Text ="0";
            txtDinhMuc.Text = "0";
            txtTenNPL.Text = "";
            txtTenSP.Text = "";
            txtMaHSSP.Text = "";
            txtMaHSNPL.Text = "";
            txtGhiChu.Text = "";
            txtNPLtucung.Text = "0";
            isAdd = true;
            dgList.Refetch();
            btnAdd.Text = "Thêm";
            DMDetail = new Company.BLL.KDT.GC.DinhMuc();
        }

        private void dgList_RowDoubleClick(object sender, Janus.Windows.GridEX.RowActionEventArgs e)
        {
            btnAdd.Text = "Sửa";
            txtMaSP.Text = e.Row.Cells[1].Text.Trim();
            txtMaNPL.Text = e.Row.Cells[2].Text.Trim();
            txtDinhMuc.Text = e.Row.Cells[3].Text.Trim();
            txtTyLeHH.Text = e.Row.Cells[4].Text.Trim();
            txtNPLtucung.Text = e.Row.Cells[6].Text.Trim();
            txtGhiChu.Text = e.Row.Cells[7].Text.Trim();
            //load thong tin sp
            SanPham sp = SanPham.Load(txtMaSP.Text.Trim(), hopdong.ID);
            if (sp != null && sp.Ma.Length > 0)
            {
                txtTenSP.Text = sp.Ten.Trim();
                txtMaHSSP.Text = sp.MaHS.Trim();
                txtDonViTinhSP.SelectedValue = sp.DVT_ID;
            }
            else
            {
                PhuKien pk = new PhuKien();
                pk = pk.LoadSanPham(hopdong.ID, "S13", txtMaSP.Text.Trim());
                txtTenSP.Text = pk.TenHang;
                txtMaHSSP.Text = pk.MaHS.Trim();
                txtDonViTinhSP.SelectedValue = pk.DVT_ID;
            }
            //load thong tin npl
            NguyenPhuLieu npl = NguyenPhuLieu.Load(txtMaNPL.Text.Trim(), hopdong.ID);
            if (npl != null && npl.Ma.Length > 0)
            {
                txtTenNPL.Text = npl.Ten.Trim();
                txtMaHSNPL.Text = npl.MaHS.Trim();
                txtDonViTinhNPL.SelectedValue = npl.DVT_ID;
            }
            else
            {
                PhuKien pk = new PhuKien();
                pk = pk.LoadSanPham(hopdong.ID, "N01", txtMaNPL.Text.Trim());
                if (pk == null)
                {
                    pk = pk.LoadSanPham(hopdong.ID, "N11", txtMaNPL.Text.Trim());
                }               
                txtTenSP.Text = pk.TenHang;
                txtMaHSSP.Text = pk.MaHS.Trim();
                txtDonViTinhSP.SelectedValue = pk.DVT_ID;
            }
            //load thong tin dinh muc vao dmDetail
            DMDetail.MaNguyenPhuLieu = txtMaNPL.Text.Trim();
            DMDetail.MaSanPham = txtMaSP.Text.Trim();
            DMDetail.TyLeHaoHut = Convert.ToDecimal(txtTyLeHH.Text);
            DMDetail.DinhMucSuDung = Convert.ToDecimal(txtDinhMuc.Text);
            DMDetail.ID = (long)Convert.ToInt64(e.Row.Cells[5].Text);
            DMDetail.NPL_TuCungUng = Convert.ToDecimal(txtNPLtucung.Text);
            DMDetail.GhiChu = txtGhiChu.Text.Trim();
            DMDetail.DVT_ID = e.Row.Cells[10].Text.Trim();
            DMDetail.TenNPL = e.Row.Cells[9].Text.Trim();
            DMDetail.TenSanPham = e.Row.Cells[8].Text.Trim();
            this.isAdd = false;
           
        }

        private void dgList_DeletingRecord(object sender, Janus.Windows.GridEX.RowActionCancelEventArgs e)
        {
            if (dmdk.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Định mức này đã duyệt chính thức. Không được chỉnh sửa", false);                
                e.Cancel = true;
                return;
            }
            if (e.Row.RowType == RowType.Record)
            {
                if (ShowMessage("Bạn có muốn xóa định mức của sản phẩm này không?", true) == "Yes")
                {
                    Company.BLL.KDT.GC.DinhMuc dm = new Company.BLL.KDT.GC.DinhMuc();
                    dm.ID = (long)Convert.ToInt64(e.Row.Cells[5].Text);
                    if (dm.ID > 0)
                    {
                       dm.Delete();                        
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void txtMaNPL_Leave(object sender, EventArgs e)
        {
            //if (txtMaNPL.Text.Trim() == "")
            //    return;
            //NguyenPhuLieu npl = NguyenPhuLieu.Load(txtMaNPL.Text.Trim(), hopdong.ID);
            //if (npl != null)
            //{
            //    txtTenNPL.Text = npl.Ten.Trim();
            //    txtMaHSNPL.Text = npl.MaHS.Trim();
            //    txtDonViTinhNPL.Text = this.DonViTinh_GetName(npl.DVT_ID).Trim();
            //}
            //else
            //{
            //    ShowMessage("Không có mã nguyên phụ liệu này", false);
            //    txtMaNPL.Text = "";
            //}
        }
    }
}